import time


def run_time(outer_function):
    # 实现一个计时装饰器
    # 1，定义一个最外层装饰器
    # 2，定义一个形参，形参用来传递{函数对象}
    # 3，在装饰器内部定义一个函数，内部函数里面需要{{调用被装饰函数}}以及执行装饰器本身的方法
    # 4，在最外层装饰器需要返回 在装饰器内部定义的内部{函数对象}
    # 5，如果被装饰函数需要进行参数传递，那么需要在被装饰函数，装饰器内函数 传递参数
    # 6，*args多个位置传参，**kwargs多个关键字传参
    # 7，装饰器的执行顺序
    # (param,param1,param2) 位置传参
    # (param = 1,param1 =2, param2 =3) 关键字传参
    def inner_func(*args, **kwargs):
        # 开始时间
        start_time = time.time()
        outer_function(*args, **kwargs)
        end_time = time.time()
        final_time = end_time - start_time
        print(f'执行时间{final_time}')

    return inner_func


@run_time
def demo(param):
    time.sleep(1)
    print("这个函数的参数为", param)


@run_time
def demo1(param=None, param1=None, param2=None):
    print(param)
    print(param1)
    print(param2)


demo("1")

demo1(param=1, param1=2, param2=[2, 3, 4])
